import os
import pandas as pd

# 定义文件路径
dhz_file = 'DHZ电量分析计算表.xlsx'
file_folder = 'File'

# 读取DHZ电量分析计算表
dhz_df = pd.read_excel(dhz_file, header=None, dtype=str)

# 检查是否有足够的行数
if dhz_df.shape[0] < 6:
    raise ValueError("数据文件中没有足够的行数")

# 转换日期格式为四位数年份
def convert_date_format(date_str):
    if len(date_str) == 6:  # 格式为 "24年7月"
        year_str, month_str = date_str.split('年')
        year_str = '20' + year_str  # 假设年份在2000年之后
        return f'{year_str}年{month_str}'
    return date_str

# 应用日期格式转换
dhz_df[0] = dhz_df[0].apply(convert_date_format)

# 找到第一列的最后一行有值的单元格
last_row = 5  # 直接从第6行开始
while last_row < dhz_df.shape[0] and pd.notna(dhz_df.at[last_row, 0]):
    last_row += 1
last_row -= 1  # 回到最后一行有值的单元格

# 解析年月
last_month_str = dhz_df.at[last_row, 0]
year_str, month_str = last_month_str.split('年')
last_year = int(year_str)
last_month = int(month_str[:-1])  # 去掉'月'字

# 获取File文件夹中的所有xlsx文件
file_list = [file_name for file_name in os.listdir(file_folder) if file_name.endswith('.xlsx')]

# 提取文件中的年月信息
file_months = []
for file_name in file_list:
    name_part = os.path.splitext(file_name)[0]
    if len(name_part) == 6 and name_part.isdigit():
        file_year = int(name_part[:4])
        file_month = int(name_part[4:])
        file_months.append((file_year, file_month))

# 找到最新的月份
if file_months:
    latest_year, latest_month = max(file_months)
else:
    latest_year, latest_month = last_year, last_month

# 计算下一个月
if last_month == 12:
    next_year = last_year + 1
    next_month = 1
else:
    next_year = last_year
    next_month = last_month + 1

# 格式化下一个月的字符串
next_month_str = f'{next_year:02d}年{next_month:02d}月'

# 格式化下一个月的文件名字符串
next_month_file_str = f'{next_year}{next_month:02d}'

# 在DHZ电量分析计算表中添加下一个月的行
new_row = [next_month_str] + [None] * (dhz_df.shape[1] - 1)
dhz_df.loc[last_row + 1] = new_row
last_row += 1

# 遍历File文件夹中的所有xlsx文件
for file_name in file_list:
    # 分离文件名和扩展名
    name_part, ext_part = os.path.splitext(file_name)

    if ext_part.lower() == '.xlsx' and name_part.endswith(next_month_file_str):
        file_path = os.path.join(file_folder, file_name)

        try:
            # 读取文件
            file_df = pd.read_excel(file_path, header=None, dtype=str)

            # 获取文件的第5行
            if file_df.shape[0] >= 44:
                fifth_row = file_df.iloc[4]  # 第5行

                # 获取 dhz_df 的第1行的值
                dhz_first_row_values = dhz_df.iloc[0].values
                print(fifth_row.iloc[3])


                # 遍历 dhz_df 的第1行值，检查是否存在匹配项
                for value in dhz_first_row_values:
                    # 检查是否存在匹配
                    if isinstance(fifth_row.iloc[1], str) and value.lower() in fifth_row[1].lower():
                        w = fifth_row.iloc[1]  # 将包含 value 的 fifth_row[1] 的内容赋值给 w

                        print(f"匹配到的值：{value}，所在内容：{w}")
                        # print(value)
                        # 在 dhz_df 的第一行中查找值为 value 的列索引
                        value_col_index = dhz_df.iloc[0][dhz_df.iloc[0] == value].index
                        # print(value_col_index[0])

                        # 在 file_df 的第五行中查找值为 w 的列索引
                        matching_indices = file_df.iloc[4][file_df.iloc[4] == w].index

                        # print(matching_indices)

                        if len(matching_indices) > 0:  # 检查是否有匹配项
                            match_col = matching_indices[0]  # 获取匹配的列索引


                            # 获取匹配列的第44行的值
                            Q = file_df.at[43, match_col]  # 获取第44行对应列的内容
                            print(f"参数 Q 的值：{Q}")


                            # 将该值赋给 dhz_df 的指定位置
                            dhz_df.at[last_row, value_col_index[0]] = Q
                        else:
                            print(f"未找到与值 '{w}' 的匹配列。")
            else:
                print(f"File {file_path} does not满足第44行数据的要求。")
        except Exception as e:
            print(f"Error processing file {file_path}: {e}")

# 保存更新后的DHZ电量分析计算表
# dhz_df.to_excel(dhz_file, index=False, header=False)
